package com.feinno.urcs.group.api;

import com.feinno.urcs.group.entity.GroupListSubscription;
import com.feinno.urcs.group.entity.GroupMemberSubscription;
import com.feinno.urcs.types.MobileNo;
import org.helium.framework.annotations.ServiceInterface;

import java.util.List;

/**
 * 群订阅关系保存管理器
 * <p>
 * Event:grouplist:  群列表信息, 长期订阅
 * Event:groupinfo:  群成员信息, 一次性订阅
 * Event:conference: 群成员信息, 长期订阅
 * <p>
 * Created by Lei Gao on 5/15/15.
 */
@ServiceInterface(id = "group:GroupSubscriptionManager")
public interface GroupSubscriptionManager {
	/**
	 * 订阅conference信息, 长期订阅
	 *
	 * @param groupId
	 * @param memberMobile
	 * @param subscribeInfo
	 */
	void subscribeConference(int groupId, MobileNo memberMobile, GroupMemberSubscription subscribeInfo);

	/**
	 * 自增并生成一个新的Cseq
	 *
	 * @param groupId
	 * @param memberMobile
	 * @return
	 */
	int increateConferenceCseq(int groupId, MobileNo memberMobile) throws IllegalAccessException, InstantiationException;

	/**
	 * 退订群组信息
	 *
	 * @param groupId
	 * @param memberMobile
	 */
	void unsubscribeConference(int groupId, MobileNo memberMobile);

	/**
	 * 退订整个群群组信息
	 *
	 * @param groupId
	 */
	void unsubscribeGroupConference(int groupId);

	/**
	 * 获取订阅信息已发送Notify
	 *
	 * @param groupId
	 * @return
	 */
	List<GroupMemberSubscription> getMemberConferenceSubscriptions(int groupId);



	/**
	 * 订阅群列表
	 *
	 * @param memberMobile
	 * @param sub
	 */
	void subscribeGroupList(MobileNo memberMobile, GroupListSubscription sub);

	/**
	 * 获取GroupList订阅的Cseq
	 *
	 * @param memberMobile
	 * @return
	 */
	int increaseGroupListCseq(MobileNo memberMobile) throws IllegalAccessException, InstantiationException;

	/**
	 * 退订GroupList的订阅
	 *
	 * @param memberMobile
	 */
	void unsubscribeGroupList(MobileNo memberMobile);

	GroupListSubscription getGroupListSubscription(MobileNo memberMobileNo) throws IllegalAccessException, InstantiationException;

	int getExpires(int groupid, MobileNo memberMobileNo);

//	/**
//	 * 增加一个用户session
//	 * @param groupId
//	 * @param memberMobile
//	 * @param session
//	 */
//	void addSession(int groupId, MobileNo memberMobile, SipSession session);
//
//	/**
//	 * 获取一个用户session
//	 * @param groupId
//	 * @param memberMobile
//	 */
//	SipSession getSession(int groupId, MobileNo memberMobile);
//
//	/**
//	 * 删除一个用户session
//	 * @param groupId
//	 * @param memberMobile
//	 */
//	void removeSession(int groupId, MobileNo memberMobile);

//	/**
//	 * 获取整个群的用户session
//	 * @param groupId
//	 * @return
//	 */
//	List<SipSession> getAllSession(int groupId);

}
